package mid

import "sort"

/*
* @author: hjz
* @time: 2025/6/5 22:15
* @desc:56. 合并区间
 */
func merge(intervals [][]int) [][]int {
	if len(intervals) == 0 {
		return intervals
	}

	// 按照区间的起始位置排序
	sort.Slice(intervals, func(i, j int) bool {
		return intervals[i][0] < intervals[j][0]
	})

	merged := [][]int{intervals[0]}

	for i := 1; i < len(intervals); i++ {
		last := merged[len(merged)-1]
		current := intervals[i]

		// 如果当前区间与最后一个合并区间有重叠
		if current[0] <= last[1] {
			// 合并区间，取最大的结束位置
			if current[1] > last[1] {
				last[1] = current[1]
			}
		} else {
			// 没有重叠，直接添加
			merged = append(merged, current)
		}
	}

	return merged
}
